﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace MvcApplication2.Models
{
    /// <summary>
    /// Questa classe è esercizio,
    /// viene modificata da publisher
    /// </summary>
    public class Exercise
    {
        public int ExerciseId { get; set; }

        /// <summary>
        /// Draft - 
        /// Published -
        /// </summary>
        public string Status { get; set; }

        [Required(ErrorMessage = "Title required")]
        public string Title { get; set; }

        // Info riguardo cosa dovre fare utente.
        public string Instruction { get; set; }

        // Aggiungere data creazione. 
        //
        //

        // Developer
        public int OwnerId { get; set; }
        public virtual UserProfile Owner { get; set; }

        /// <summary>
        /// A seconda del dispositivo verra scelto di registrare con webcam oppure screencapture.
        /// </summary>
        public int? DeviceId { get; set; }
        public virtual Device Device { get; set; }

        public virtual ICollection<UserMessage> ThreadMessages { get; set; }
    }


    /// <summary>
    /// Questo è il test che viene fatto da user-tester
    /// </summary>
    //public class ExerciseTest
    //{
    //    public int ExerciseTestId { get; set; }

    //    public int ExerciseId { get; set; }
    //    public Exercise Exercise { get; set; }

    //    public int UserId { get; set; }
    //    public User User { get; set; }

    //    /// <summary>
    //    /// -new
    //    /// -to_encode
    //    /// -to_upload
    //    /// -to_pay
    //    /// -completed
    //    /// </summary>
    //    public string TestStatus { get; set; }
    //}
}

/*
 
    /// <summary>
    /// La chiave sara azione : 
    ///     es :
    ///         start browser
    ///         start program 
    ///        start recording 
    ///  e il value sarà 
    ///         es :
    ///            -nome sito
    ///            -file
    ///            - audio - video - screencast - webcam
    /// </summary>
    //public class ClientAction
    //{
    //    public int ClientActionId { get; set; }
    //    public string Key { get; set; }
    //    public string Value { get; set; }
    //    public int OrderIndex { get; set; }

    //    public int QuestId { get; set; }
    //    public Exercise Quest { get; set; }
    //}

    //public abstract class SurveyQuestion
    //{
    //    public string Question { get; set; }

    //    public int QuestId { get; set; }
    //    public Exercise Quest { get; set; }
    //}

    //public class MultipleAnswer : SurveyQuestion
    //{
    //    public ICollection<string> Answers { get; set; }

    //    public ICollection<int> SelectedAnswers { get; set; }

    //    // fare calcolata ??
    //    public bool Answered { get; set; }
    //}

    //public class SingleAnswer : SurveyQuestion
    //{
    //    public ICollection<string> Answers { get; set; }

    //    public int SelectedAnswer { get; set; }
    //}

    //public class FreeAnswer : SurveyQuestion
    //{
    //    public string Answer { get; set; }
    //}
    /*
   * come classe quest penso sia ok quella scritta nel model del sito
   * invece di creare classi . uso convenzioni su azioni.
   * lancia sito www.esempio.it
   * 
   * potrei fare che sia parte iniziale della questa.
   * azione iniziale. -> cerca programma -> lancia file -> lancia sito ->
   * 
   * per fare prove posso provare a fare dummy exercise. 
   * faccio interfaccia che mi da esercizi finti.
   * 
   * poi fare interfaccia che si collegga effettivamente al sito.
   * 
    * esercizio
    * -> levo esercizio applicazione e tengo solamente quest ?
    * -> quasi quasi
    * -> potro magari successivamente fare collezzione di quest.
   * 

/// <summary>
/// Lo sviluppatore pubblica applicazioni.
/// </summary>
//public class Application
//{
//    public int ApplicationId { get; set; }

//    public string Name { get; set; }

//    public ICollection<Exercise> ApplicationExercises { get; set; }

//    public string TargetDevice { get; set; }

//    public decimal CriticalBugReward { get; set; }

//    public int UserId { get; set; }
//    public User User { get; set; }
//}
*/
